// Package models
package models

type Page struct {
	// 页面传递的参数或者是配置的参数
	CurrentPage int // 当前页
	PageSize    int // 每页显示多少条记录

	// 需要查询数据库
	TotalRecord int           // 总记录数
	RecordList  []interface{} // 本页的数据列表

	// 需要计算
	TotalPage      int // 总页数
	BeginPageIndex int // 页码列表的开始索引（包含）
	EndPageIndex   int // 页面列表的结束索引（包含）
}

// 构造Page的函数
func NewPage(currentPage, pageSize, totalRecord int, recordList []interface{}) *Page {

	page := &Page{CurrentPage: currentPage, PageSize: pageSize, TotalRecord: totalRecord, RecordList: recordList}

	// 计算 totalPage
	page.TotalPage = (totalRecord + pageSize - 1) / pageSize

	// 计算 beginPageIndex 和 endPageIndex
	// >>> 总页数小于等于10页面的时，全部显示
	if page.TotalPage <= 10 {
		page.BeginPageIndex = 1
		page.EndPageIndex = page.TotalPage
	} else { // >>> 总页数大于10页时，就只显示当前页附近的共10个页码
		// 默认显示前4页 + 当前页 + 后5页
		page.BeginPageIndex = currentPage - 4 // 当前第7页，7 - 4 = 3
		page.EndPageIndex = currentPage + 5   // 当前第7页，7 + 5 = 12 --> 3页 ~ 12页

		// 如果前面不足4个页码时，则显示前10页
		if page.BeginPageIndex < 1 {
			page.BeginPageIndex = 1
			page.EndPageIndex = 10
		} else if page.EndPageIndex > page.TotalPage { // 如果后面不足5个页码时，则显示后10页
			page.BeginPageIndex = page.TotalPage - 9
			page.EndPageIndex = page.TotalPage
		}
	}

	return page
}
